package com.tydic.common.mybatis.core.page;

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;

/**
 * 表格分页数据对象
 *
 * @author Lion Li
 */

@Data
@NoArgsConstructor
public class TableDataInfo<T> implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;


    /**
     * 列表数据
     */
    private List<T> list;
    /**
     * 列表数据
     */
    private List<T> content;
    /**
     * 分页数量
     */
    private long pageNo;
    /**
     * 分页数量
     */
    private long number;
    /**
     * 分页大小
     */
    private long pageSize;
    /**
     * 分页大小
     */
    private long size;
    /**
     * 总数
     */
    private long count;
    /**
     * 总数
     */
    private long totalElements;
    /**
     * 分页总数
     */
    private long totalPages;

    /**
     * 分页
     *
     * @param list  列表数据
     * @param count 总记录数
     */
    public TableDataInfo(List<T> list, long count) {
        this.list = list;
        this.count = count;
    }

    public static <T> TableDataInfo<T> build(IPage<T> page) {
        TableDataInfo<T> rspData = new TableDataInfo<>();
        rspData.setList(page.getRecords());
        rspData.setContent(page.getRecords());
        rspData.setCount(page.getTotal());
        rspData.setTotalElements(page.getTotal());
        rspData.setPageNo(page.getCurrent());
        rspData.setNumber(Math.max(0, page.getCurrent() - 1));
        rspData.setPageSize(page.getSize());
        rspData.setSize(page.getSize());
        return rspData;
    }

    public static <T> TableDataInfo<T> build(List<T> list) {
        TableDataInfo<T> rspData = new TableDataInfo<>();
        rspData.setList(list);
        rspData.setCount(list.size());
        return rspData;
    }

    public static <T> TableDataInfo<T> build() {
        return new TableDataInfo<>();
    }

}
